/**
 * 
 */
package uy.com.pzit.fpmundialmodel.service;

import java.util.Date;

import uy.com.pzit.fpmundialmodel.calculator.RankingFifaCalculator;
import uy.com.pzit.fpmundialmodel.domain.Encuentro;
import uy.com.pzit.fpmundialmodel.domain.Fase;
import uy.com.pzit.fpmundialmodel.manager.CompetenciaManager;
import uy.com.pzit.fpmundialmodel.manager.ConfederacionManager;
import uy.com.pzit.fpmundialmodel.manager.EncuentroManager;
import uy.com.pzit.fpmundialmodel.manager.PaisManager;
import uy.com.pzit.fpmundialmodel.response.EncuentroResponse;
import uy.com.pzit.fpmundialmodel.web.ModelContextServlet;
import uy.com.pzit.fpmundialmodel.web.ws.EncuentroService;

/**
 * @author pferraz
 *
 */
public class EncuentroServiceImpl implements EncuentroService {

	private PaisManager paisManager;
	private ConfederacionManager confederacionManager;
	private EncuentroManager encuentroManager;
	private CompetenciaManager competenciaManager;
	
	@Override
	public EncuentroResponse registrarEncuentro(Encuentro encuentro,int idCompetencia) {
		encuentro.setFecha(new Date());
		getManager().addEncuentro(encuentro);
		EncuentroResponse resp=new EncuentroResponse();
		
		getCompetenciaManager().manageCompetencia(encuentro,idCompetencia,resp);
		Date competenciaCompletada=resp.getCompetenciaCompletada();
		double pesoConf1=getConfederacionManager().getConfederacionByPais(encuentro.getPais1().getNombre()).getPesoRanking();
		double pesoConf2=getConfederacionManager().getConfederacionByPais(encuentro.getPais2().getNombre()).getPesoRanking();
		RankingFifaCalculator.calcular(encuentro,pesoConf1,pesoConf2);
		encuentro.getPais1().setPartidosEnCompeticion(encuentro.getPais1().getPartidosEnCompeticion()+1);
		encuentro.getPais2().setPartidosEnCompeticion(encuentro.getPais2().getPartidosEnCompeticion()+1);
		getPaisManager().updatePais(encuentro.getPais1());
		getPaisManager().updatePais(encuentro.getPais2());
		
		getPaisManager().updateRanking();
		if(Fase.valueOf(encuentro.getFase())==Fase.ELIMINATORIA||Fase.valueOf(encuentro.getFase())==Fase.FASE_GRUPOS)
			resp=getManager().updateTables(encuentro,idCompetencia);
		resp.setEncuentro(encuentro);
		resp.setCompetenciaCompletada(competenciaCompletada);
		return resp;
	}
	
	private EncuentroManager getManager() {
		if(this.encuentroManager==null)
			this.encuentroManager=(EncuentroManager)ModelContextServlet.getSpringContext().getBean("encuentroManager");
		return this.encuentroManager;
	}
	
	private PaisManager getPaisManager() {
		if(this.paisManager==null)
			this.paisManager=(PaisManager)ModelContextServlet.getSpringContext().getBean("paisManager");
		return this.paisManager;
	}
	
	private ConfederacionManager getConfederacionManager() {
		if(this.confederacionManager==null)
			this.confederacionManager=(ConfederacionManager)ModelContextServlet.getSpringContext().getBean("confederacionManager");
		return this.confederacionManager;
	}

	
	private CompetenciaManager getCompetenciaManager() {
		if(this.competenciaManager==null)
			this.competenciaManager=(CompetenciaManager)ModelContextServlet.getSpringContext().getBean("competenciaManager");
		return this.competenciaManager;
	}
	
}
